/*
 * Copyright (c) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef HI_STR_UTIL_H
#define HI_STR_UTIL_H

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
    dup string.
    同strdup，只是使用malloc()来分配内存.
*/
char* HiStrdup(const char* s);

/**
    字符串不区分大小写比较.
*/
int HiStricmp(const char *s1, const char *s2);
int HiStrincmp(const char *s1, const char *s2, size_t n);

/**
    查找子字符串.
*/
char* HiStristr(const char *s1, const char *s2);

/**
    字符串copy.
*/
int HiStrxfrm(char *s1, const char *s2, int n);

/**
    字符串大小写转换.
*/
char* HiStrupr(char *s);
char* HiStrlwr(char *s);

/**
    统计字符串中指定字符出现的次数.
*/
int HiStrchrc(const char* s, int c);

/**
    strtok的线程安全版本.

    hi_strtok不需要维护static变量，是线程安全的版本。

    @param tokens [in|out]: 包含token的字符串的"地址"。
    @param delimit [in]: token分隔符集合。
    @param len [out]: token的长度，当成功得到token时有效。

    @return 成功则返回token，否则返回NULL。
*/
char* HiStrtoks(char** tokens, const char* delimit);
const char* HiStrtokx(const char** tokens, const char* delimit, int* len);

/**
    取path (全路径)的名称部分.
    不支持windows路径.
*/
const char* HiPathName(const char* path);

/**
    取path的name的文件名后缀.
    不支持windows路径.
*/
const char* HiPathExt(const char* path);

#ifdef __cplusplus
}
#endif

#endif // HI_STR_UTIL_H
